<?php

require_once 'SC/SCpersonne.php';
require_once 'SC/SCpays.php';
require_once 'SC/SClocalite.php';
require_once 'SC/SCadresse.php';
require_once 'SC/SChabitation.php';
require_once 'SC/SCrole.php';
require_once 'SC/SCpersonnetorole.php';
require_once 'SC/SCregion.php';
require_once 'SC/SChistorique.php';
require_once 'SC/SCversement.php';

/**
 * Classe permettant de gérer les services fonctionnel manipulant des Personnes 
 * @author Alain
 */
class SFpersonne{

    /**
     * Methode permettant de mémoriser une personne
     * @param Personne Personne à mémoriser
     * @return Personne personne mémorisée
     */
    public function ajouter(Personne $unePersonneAAjouter, Adresse $adresse, $adresse_type, Localite $localite, Region $region, $pays, $role) {
        $unePersonneMemorisee = null;
        $uneLocaliteMemorisee = null;
         
        //vérifier l'existance de Region sinon l'ajoute
        $SCregion = new SCregion();
        if($SCregion->lister($region)==null)
            $SCregion->ajouter($region);
        //vérifier l'existance de Localite sinon l'ajoute
        $SClocalite = new SClocalite();
        if($SClocalite->lister(New Localite($localite->getNpa(), null, null, null))==null){
            $SClocalite->ajouter($localite);    
        }
                
        //vérifier l'existance de l'adresse sinon l'ajoute
        $SCadresse = new SCadresse();
        if($SCadresse->lister(new Adresse($adresse->getLigne1(), null, null, null, $adresse->getLocalite_npa()))==null){
            $uneAdresseMemorisee = $SCadresse->ajouter($adresse);
        }
        
        // Mémorise la personne
        $SCpersonne = new SCpersonne;
            $unePersonneMemorisee = $SCpersonne->ajouter($unePersonneAAjouter);
        
        //Lie la personne à l'adresse
        $SChabitation = new SChabitation();
            $uneHabitationMemorisee = $SChabitation->ajouter(new Habitation($adresse->getLigne1(), $adresse->getLocalite_npa(), $unePersonneMemorisee->getId(), $adresse_type));
       
        //Ajoute le role de la personne
        $SCpersonnetorole = new SCpersonnetorole();
            $SCpersonnetorole->ajouter(new PersonneToRole($role, $unePersonneMemorisee->getID()));  
                
        return array($unePersonneMemorisee,$uneAdresseMemorisee, $localite);

    }
    /**
     *  Methode permettant de modifier une personne
     * @param Personnne $unePersonneAModifier
     * @return Personne une personne
     */
    public function modifier($unePersonneAModifier) {
        $unePersonneModifiee = null;
        $SCpersonne = new SCPersonne(); 
        
        //on vérifie si la personne existe bien
        if($SCpersonne->lister($unePersonneAModifier)!=null);
            $unePersonneModifiee = $SCpersonne->modifier($unePersonneAModifier);        
        return $unePersonneModifiee;
    }

    /**
     * Methode permetttant de renvoyer une ou plusieur Personne
     * @param Personne Personne à lister
     * @return Personne personne ou tableau de personne
     */
    public function lister($personneALister) {

        $SCpersonne = new SCpersonne();
        return $listePersonnes = $SCpersonne->lister($personneALister);

    }
    
    /**
     * Methode permettant de lister les roles d'une personne
     * @param Personne unePersonne
     * @return Role un ou des roles
     */
    public function listerRole(Personne $personne){
        
        $role = null;
        
        $SCpersonne = new SCpersonne();
        $SCpersonneToRole = new SCpersonnetorole();
        
        //on vérifie l'existance de la personne
        if($SCpersonne->lister($personne)!=null)
            $personneToRole = new PersonneToRole(null, $personne->getId());
            

            $role = $SCpersonneToRole->lister($personneToRole);
        
        return $role;   
    }
    
        /**
     * Methode permettant de lister les adresse d'une personne
     * @param Personne unePersonne
     * @return array de Adresse
     */
    public function listerAdresse($personne){
        
        $adresse = null;
        
        $SCpersonne = new SCpersonne();
        $SCadresse = new SCadresse();
        $SChabitation = new SChabitation();
        $SCLocalite = new SClocalite();
        
        //on vérifie l'existance de la personne
        if($SCpersonne->lister($personne)!=null){
            $habitation = $SChabitation->lister(new Habitation(null, null, $personne->getId(), null));
            if($habitation!=null){
                foreach ($habitation as $value) {
                    $npa = $value->getLocalite_npa() ;
                    $ligne1 = $value->getAdresse_ligne1();
                    $localite[] = $SCLocalite->lister(new Localite($value->getLocalite_npa(), NULL, NULL, NULL));
                    $adresse[] = $SCadresse->lister(new Adresse($ligne1, NULL, null, null, $npa));
                    
                }
            }
        }
        return array($adresse, $localite);   
    }
    
    public function supprimer($personne){
        $SCpersonne = new SCpersonne();
        $SCpersonne->supprimer($personne);
    }
    
}

?>
